package ru.amse.ilyin.builder;

import java.io.File;
import java.util.List;

import ru.amse.ilyin.analyzer.Entity;
import ru.amse.ilyin.analyzer.Package;
import ru.amse.ilyin.diagram.Diagram;

/**
 * Loads information about structure of a Java application and
 * represents it as a diagram that can be drawn.
 *
 * @author Alexander Ilyin
 */
public interface DiagramBuilder {
	/**
	 * Gets all packages and their dependencies from the specified 
	 * root package.
	 * 
	 * @param rootPackage root package pathname
	 * @return package diagram
	 */
	Diagram getPackageDiagram(File rootPackage);
	
	/**
	 * Gets all class (interfaces) and their relations from the 
	 * specified package.
	 * 
	 * @param aPackage package
	 * @return class diagram
	 */
	Diagram getClassDiagram(Package aPackage);
	
	/**
	 * Returns elements of the specified entity.
	 * 
	 * @param anEntity entity
	 * @return elements of the specified entity
	 */
	List<String> getElements(Entity anEntity);
}
